<?php

//Inclure la class d'accès à la base de données
include_once '../../DBAccess/DBAccess.php';

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of deperditionFloor
 *
 * @author TONY
 */
class AlgoFloor {

    public $ti; //Température intérieure
    public $te; //Température extérieure
    public $textra; //Extrapolation - supplément de régulation
    public $tc = 365; //Durée de la période de calcul
    public $floorArea; //Surface du sol (plancher)
    public $valueUFloor; // Valeur U du sol
    public $totalDeperditionFloor; //Déperdition totale du sol
    public $totalSurface; //Valeur de calcul pour SRE
    public $SRE; //Surface de référence énergétique

    function getTotalDeperditionFloor($house) {

        //Récupération de la température extérieure selon la ville de résidence
        $this->te = DBAccess::getExTemp($house->idCity);

        //Récupération du supplément de régulation pour la température ambiante
        $this->textra = DBAccess::getTempExtrapolation($house->year);
        //Température exemple
        $this->ti = $house->roomsTemp;
        $this->ti = $this->ti + $this->textra;
        
        //Calcul du SRE
        $this->SRE = $this->getSRE($house);

        $this->floorArea = $this->getFloorArea($house);

        switch ($house->floor->continuity) {
            //Placher exposé à l'air extérieur
            case '1':
                
                $this->valueUFloor = 2.5;
                
                $this->totalDeperditionFloor = ($this->ti - $this->te) * $this->tc * $this->floorArea * $this->valueUFloor * 86400 / (1000000 * $this->SRE);
               
                break;
            
            //Placher contre locaux non chauffés
            case '2':

               //Test pour savoir si des couches de matériaux existe
                if (!empty($house->floor->layers)) {
                    
                   // $this->valueUFloor = 1 / (0.34 + getRtherm($house->floor->layers));
                    
                } else {
                    //Test pour savoir si le plafond a été rénové
                    if (!empty($house->floor->year)) {
                        
                        //Calcul de la valeur U du plafond
                        $this->valueUFloor = DBAccess::getValueU_FloorNC($house->floor->year);
                    }
                    else
                        $this->valueUFloor = DBAccess::getValueU_FloorNC($house->year);
                }
                
                                     
                //Récupération du facteur de correction pour sol NC
                $this->factReducNC = DBAccess::getFactReducFloorNC($this->valueUFloor);

                //Calcul de la déperdition pour le sol
                $this->totalDeperditionFloor = ($this->ti - $this->te) * $this->tc * $this->floorArea * $this->valueUFloor * $this->factReducNC * 86400 / (1000000 * $this->SRE);
                 
                break;
                
            //Placher avec chauffage intégré en contact avec le terrain
            case '3':

                 //Test pour savoir si des couches de matériaux existe
                if (!empty($house->floor->layers)) {
                    
                   // $this->valueUFloor = 1 / (0.34 + getRtherm($house->floor->layers));
                    
                } else {
                    //Test pour savoir si le plafond a été rénové
                    if (!empty($house->floor->year)) {
                        //Calcul de la valeur U du plafond
                        $this->valueUFloor = DBAccess::getValueU_FloorT($house->floor->year);
                    }
                    else
                        $this->valueUFloor = DBAccess::getValueU_FloorT($house->year);
                }

                //Récupération du facteur de correction pour sol NC
                $this->factReducT = DBAccess::getFactReducFloorT($this->valueUFloor);
                
                //Calcul de la déperdition pour le sol
                $this->totalDeperditionFloor = ($this->ti - $this->te) * $this->tc * $this->floorArea * $this->valueUFloor * $this->factReducT * 86400 / (1000000 * $this->SRE);
                 
                break;

            default:
                echo 'Continuité du plancher non connue....';
                break;
        }
        
        return $this->totalDeperditionFloor;
             
    }

    //Calcul de la surface du sol selon la forme et les dimensions de la maison
    function getFloorArea($house) {
        switch ($house->idShape) {
            // Forme carré 
            case 1:
                return $house->M1 * $house->M1;
                break;
            // Forme rectangle 
            case 2:
                return $house->M1 * $house->M2;
                break;

            //Forme en L
            case 3:
                return ($house->M1 * $house->M4) + ($house->M2 - $house->M4) * $house->M3;
                break;

            //Forme en U
            case 4:
                return ($house->M1 * $house->M6) + ($house->M4 * $house->M5) + ($house->M2 - $house->M6) * $house->M3;
                break;

            //Forme rect. décalé
            case 5:
                return ($house->M1 * $house->M2) + $house->M6 * ($house->M7 - $house->M4) + ($house->M4 * $house->M5);
                break;

            //Forme en T
            case 6:
                return ($house->M1 * $house->M2) + ($house->M4 * $house->M5);
                break;

            default :
                echo 'Forme de la maison non connue....';
                break;
        }
    }
    
    //Fonction pour le calcul de la surface de référence énergétique (SRE)
    function getSRE($house) {
        switch ($house->idShape) {
            // Forme carré et rectangle
            case 1:
                $this->totalSurface = $house->M1 * $house->M1 * $house->floors;
                break;
            case 2:
                $this->totalSurface = $house->M1 * $house->M2;
                $this->totalSurface *= $house->floors;

                break;
            //Forme en L
            case 3:
                $this->totalSurface = ($house->M1 * $house->M4) + ($house->M2 - $house->M4) * $house->M3;
                $this->totalSurface *= $house->floors;
                break;
            //Forme en U
            case 4:
                $this->totalSurface = ($house->M1 * $house->M6) + ($house->M4 * $house->M5) + ($house->M2 - $house->M6) * $house->M3;
                $this->totalSurface *= $house->floors;
                break;
            //Forme rect. décalé
            case 5:
               $this->totalSurface = ($house->M1 * $house->M2) + $house->M6 * ($house->M7 - $house->M4) + ($house->M4 * $house->M5);
                $this->totalSurface *= $house->floors;
                break;
            //Forme en T
             case 6:
                $this->totalSurface = ($house->M1 * $house->M2) + ($house->M4 * $house->M5);
                $this->totalSurface *= $house->floors;
                break;
            
            default :
                echo 'Forme de la maison non connue....';
                break;
        }

        return $this->totalSurface;
    }

}
?>